package com.jy.api.util;

import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.SendResult;
import com.aliyun.openservices.ons.api.bean.ProducerBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * 功能描述:阿里云MQ初始化启动
 *
 * @author zhangql(zhangqilun@126.com)
 * @version v1.0
 * @date 2016/9/30
 */
@Slf4j
@Component
public class AliyunProducerClient {


    @Value("${aliyun.propertykeyconst.topicid}")
    private String topicid;

    @Autowired
    private ProducerBean producerBean;

    private String ORDER_PRINTING = "ORDER_PRINTING";


    @Async
    public void send(String id, String message) {
        try {
            Message msg = new Message(
                    //Message Topic
                    topicid,
                    //Message Tag,
                    //可理解为Gmail中的标签，对消息进行再归类，方便Consumer指定过滤条件在ONS服务器过滤
                    ORDER_PRINTING,
                    //Message Body
                    //任何二进制形式的数据，ONS不做任何干预，需要Producer与Consumer协商好一致的序列化和反序列化方式
                    message.getBytes("utf-8"));

            // 设置代表消息的业务关键属性，请尽可能全局唯一。
            // 以方便您在无法正常收到消息情况下，可通过ONS Console查询消息并补发。
            // 注意：不设置也不会影响消息正常收发
            msg.setKey(id);

            //发送消息，只要不抛异常就是成功
            SendResult sendResult = producerBean.send(msg);
            log.debug("Success to send ONS message:{}", message);
        } catch (Exception e) {
            log.error("Fail to send ONS message:{}", message, e);
        }
    }


}
